\subsection{Pregunta 1}

\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Qu\'e ocurre si se intenta escribir en la fila 26, columna 1 de la matriz de
		video, utilizando el usando el segmento de la GDT que direcciona a la memoria de video?
		?`Por qu\'e?%
	}
	\parbox{\linewidth}{        }%
}
\\

Si se intenta escribir en la fila 26, columna 1 de la matriz de video, utilizando el
segmento de la GDT que direcciona a la memoria de video, no genera ning\'un resultado en
pantalla, ya que nos excedemos del rango permitido. Si bien podemos escribir en la memoria lo
que queramos, no se va a poder ver reflejado en la pantalla. Deber\'iamos tener una excepci\'on
de protecci\'on, pero como no tenemos restricciones acerca de los privilegios, no hay problema
con escribir en la parte de memoria que queramos, siempre y cuando est\'e comprendida en
alg\'un segmento de la GDT v\'alido. Como la direcci\'on en la que escribimos no es alcanzada por
la memoria de video, escribimos el dato, pero no sale impreso en la pantalla.


\subsection{Pregunta 2}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Qu\'e ocurre si no se setean todos los registros de segmento al entrar en modo protegido?
		?`Es necesario setearlos todos?
		?`Por qu\'e?%
	}
	\parbox{\linewidth}{        }%
}
\\

Al hacer el salto al modo Protegido se setea el registro de CS. Si no se setean todos los registros de segmento al entrar a modo protegido puede producirse infracciones de protecci\'on, dado que cuando se utilizan los segmentos DS, ES, FS y GS puede excederse el l\'imite del segmento. Lo mismo ocurre con SS, que si no se setea y se desea usar la pila podr\'ia generar una infracci\'on. En las operaciones en modo Protegido los registros de segmento funcionan para mantener selectores que se encuentran en la GDT.


\subsection{Pregunta 3}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`C\'omo se puede hacer para generar una excepci\'on sin utilizar la instrucci\'on
		\texttt{int}?
		Mencionar al menos 3 formas posibles.%
	}
	\parbox{\linewidth}{        }%
}
\\

Se la puede generar a mano, por ejemplo generando una divisi\'on inv\'alida
(Divisi\'on por cero), accediendo a una posici\'on de memoria que no nos corresponde (general
protection), o cuando se quiere ejecutar una instrucci\'on con par\'ametros incorrectos (invalid
opcode).


\subsection{Pregunta 4}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Cu\'ales son los valores del stack cuando se genera una interrupci\'on?
		?`Qu\'e significan? (indicar para el caso de operar en nivel 3 y nivel 0)%
	}
	\parbox{\linewidth}{        }%
}
\\

Los valores del stack son las posiciones de la memoria en donde queda apuntando
el {\bf esp} al momento de salir de una funci\'on. O sea que podemos ver c\'omo se fue alterando la
memoria con el paso por cada una de las funciones ejecutadas. Cuando se genera una interrupci\'on se genera tambi\'en un Error Code.
Si no hay cambio de nivel, los datos son : Error Code, EIP, CS, EFLAGS. Si hay cambio de nivel, los datos son : Error Code, EIP, CS, EFLAGS, ESP, SS.


\subsection{Pregunta 5}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Puede el directorio de p\'aginas estar en cualquier posici\'on arbitraria de memoria?%
	}
	\parbox{\linewidth}{        }%
}
\\

No, debe estar contemplado bajo un segmento de datos y debe estar alineado a 4KB, dado que en las pcs actuales se utiliza un tama\~n0 de p\'agina de 4KB. Si los segmentos de datos ocuparan los 4GB direccionables no habr\'ia problema siempre y cuando est\'e alineado a 4KB, salvo si estuviera sobre la memoria de video.\\


\subsection{Pregunta 6}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Es posible acceder a una p\'agina de nivel de kernel desde usuario?%
	}
	\parbox{\linewidth}{        }%
}
\\

No. Al querer traducir la direcci\'on solicitada el descriptor de segmento va a validar
los permisos disponibles. Si el descriptor permite solo acceso con nivel 0 (kernel), este
va a rechazar el acceso con nivel 3 (usuario) y por lo tanto no ser\'a posible acceder
a la p\'agina solicitada.
\\


\subsection{Pregunta 7}
\fbox{%
	\parbox{0.9\linewidth}{%
		?`Se puede mapear una p\'agina f\'isica desde dos direcciones virtuales distintas
		tal que una est\'e mapeada con nivel de usuario y la otra a nivel de kernel?
		De ser posible, ?`qu\'e problemas puede traer?%
	}
	\parbox{\linewidth}{        }%
}
\\

S\'i, se puede. Los problemas que puede traer son que al estar mapeada en modo
usuario puede ser modificada por el usuario y por lo tanto, si el Kernel utiliza la p\'agina,
puede contener datos modificados con errores provenientes del usuario.


\subsection{Pregunta 8}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Qu\'e permisos pueden tener las tablas y directorios de p\'aginas?
		?`Cu\'ales son los permisos efectivos de una direcci\'on de memoria seg\'un los permisos
		del directorio y tablas de p\'aginas?%
	}
	\parbox{\linewidth}{        }%
}
\\

Cada directorio o tabla de p\'aginas puede tener permiso de supervisor o usuario, y
\'este se indica con el tercer bit menos significativo tanto en el de la entrada de directorio de p\'aginas como en la
de tabla de p\'aginas. Tambi\'en existen permisos de lectura y escritura que indican si la direcci\'on
de memoria apuntada puede leerse y/o escribirse y lo indica el segundo bit menos significativo.


\subsection{Pregunta 9}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Es posible desde dos directorios de p\'agina referenciar a una misma tabla de p\'aginas?%
	}
	\parbox{\linewidth}{        }%
}
\\

S\'i, es posible y sirve para crear memoria compartida entre dos procesos distintos. Simplemente en el directorio de tabla de p\'aginas ponemos dos entradas que apunten a la misma tabla de p\'agina.


\subsection{Pregunta 10}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Qu\'e es el TLB (Translation Lookaside Buffer) y para qu\'e sirve?%
	}
	\parbox{\linewidth}{        }%
}
\\

El TLB es una cache que guarda las traducciones de direcci\'on virtual a f\'isica. Sirve para evitar
hacer la traducci\'on en cada acceso a memoria. Es importante notar que s\'olo es necesario limpiarla
cuando se hace un desmapeo, pues cuando se agrega una nueva entrada en el mapa este seguro no se
encuentra en la cache. Sin embargo, si modificamos una entrada sin eliminarla entonces s\'i deber\'ia
limpiarla.


\subsection{Pregunta 11}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Qu\'e pasa si en la interrupci\'on de teclado no se lee la tecla presionada?%
	}
	\parbox{\linewidth}{        }%
}
\\

Si en la interrupci\'on de teclado no se lee la tecla presionada no sucede nada visualmente. Sin embargo, si la tecla presionada es imprimible se almacena en el buffer de teclado, si es de control no se almacena.


\subsection{Pregunta 12}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Qu\'e pasa si no se resetea el PIC?%
	}
	\parbox{\linewidth}{        }%
}
\\

El objetivo de remapear el PIC es que las interrupciones que generan los dem\'as
dispositivos de la m\'aquina no entren en conflicto con las interrupciones de la CPU,
dado que coinciden en el c\'odigo de interrupci\'on.
Por lo tanto, de no resetear el PIC se producir\'ian conflictos a la hora de identificar
y procesar las interrupciones.


\subsection{Pregunta 13}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`Colocando un breakpoint luego de la cargar una tarea, ?`c\'omo se puede verificar,
		utilizando el debugger de Bochs, que la tarea se carg\'o correctamente?
		?`C\'omo se llega a esta conclusi\'on?%
	}
	\parbox{\linewidth}{        }%
}
\\

Colocando un breakpoint luego de la cargar una tarea, se puede verificar,
utilizando el debugger de Bochs, que la tarea se carg\'o correctamente escribiendo en
la consola \texttt{\texttt{"}info gdt"} para ver el descriptor de cada una de las entradas en la GDT, y
comprobando que la tarea que deber\'ia estar corriendo dice {\bf Busy} en vez de {\bf Available}.
Eso quiere decir que la tarea cuya tss est\'a descripta por ese segmento est\'a corriendo.


\subsection{Pregunta 14}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		?`C\'omo se puede verificar si la conmutaci\'on de tarea fue exitosa?%
	}
	\parbox{\linewidth}{        }%
}
\\

De la misma manera que en la pregunta 13, si ponemos un breakpoint antes
del salto y otro luego del salto, podemos advertir cu\'ales son las tareas que se conmutaron, es
decir la que estaba corriendo anteriormente, y la que empieza a correr luego del salto. La tarea
actual es la \'unica que va a tener el atributo de {\bf Busy}.


\subsection{Pregunta 15}
\fbox{%
	\parbox{\linewidth}{        }
	\parbox{0.89\linewidth}{%
		Se sabe que las tareas llaman a la interrupci\'on \texttt{0x45}. ?`Qu\'e ocurre si esta no est\'a
		implementada?
		?`Por qu\'e?%
		
	}
	\parbox{\linewidth}{        }%
}
\\

Si no se implementa la interrupci\'on \texttt{0x45}, cuando las tareas la llamen, no van a
saber c\'omo responder al llamado y el sistema se va a colgar sin saber c\'omo seguir.


